/* Die Klasse Zeitschriftsuchen implementiert alle suchemoeglichkeit , 
 * die man fuer die einer Zeitschrift braucht
 * 
 * 
 * Datei: Zeitschriftsuchen.java       
 * Autor: Gregory Keussi
 * 
 * Datum: 16.11.11                 Version: 0.1 
 * 
 * Historie: 12.11.11 v0.1  
 *                    implementiert  
 * 
 */

package suche;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import medienverwaltung.Medium;
import medienverwaltung.Zeitschrift;

public class Zeitschriftsuchen
{
  private List<Zeitschrift> myZeitschriftList;
  private List<Zeitschrift> Ergebnis = new ArrayList<Zeitschrift> ();


  /*
   * Die Methode ermoeglich die suche eines Zeitschrift nach dem Titel
   */

  public List<Zeitschrift> suchZeitschriftNachTitel (String titel)
  {
    for (Zeitschrift Zeitschrift : myZeitschriftList)
    {
      if ( (Zeitschrift.gibTitel ().contains (titel)) == true)
      {
        Ergebnis.add (Zeitschrift);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Zeitschrift nach dem Thema
   */
  public List<Zeitschrift> suchZeitschriftNachThema (String thema)
  {
    for (Zeitschrift Zeitschrift : myZeitschriftList)
    {
      if ( (Zeitschrift.gibTitel ().contains (thema)) == true)
      {
        Ergebnis.add (Zeitschrift);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Zeitschrift nach der
   * Stichwoerte und liefert eine Liste von entsprechende Zeitschriften
   * zurueck,die Suche Krietere entsprechen
   */

  public List<Zeitschrift> suchZeitschriftNachStichworte (String stich)
  {
    for (Zeitschrift Zeitschrift : myZeitschriftList)
    {
      if ( (Zeitschrift.gibTitel ().contains (stich)) == true)
      {
        Ergebnis.add (Zeitschrift);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Zeitschrift nach der
   * Fachgebiet und liefert eine Liste von entsprechende Zeitschriften
   * zurueck,die Suche Krietere entsprechen
   */

  public List<Zeitschrift> suchZeitschriftNachFachgebiet (String fach)
  {
    for (Zeitschrift Zeitschrift : myZeitschriftList)
    {
      if ( (Zeitschrift.gibTitel ().contains (fach)) == true)
      {
        Ergebnis.add (Zeitschrift);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Zeitschrift nach der Initial
   * und liefert eine Liste von entsprechende Zeitschriften zurueck,die
   * Suche Krietere entsprechen
   */

  public List<Zeitschrift> suchZeitschriftNachInitial (String initial)
  {
    for (Zeitschrift Zeitschrift : myZeitschriftList)
    {
      if ( (Zeitschrift.gibTitel ().contains (initial)) == true)
      {
        Ergebnis.add (Zeitschrift);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Zeitschrift nach der
   * Sachgebiet und liefert eine Liste von entsprechende Zeitschriften
   * zurueck,die Suche Krietere entsprechen
   */

  public List<Zeitschrift> suchZeitschriftNachSachgebiet (String sach)
  {
    for (Zeitschrift Zeitschrift : myZeitschriftList)
    {
      if ( (Zeitschrift.gibTitel ().contains (sach)) == true)
      {
        Ergebnis.add (Zeitschrift);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Zeitschrift nach dem Datum
   * und liefert eine Liste von entsprechende Zeitschriften zurueck,die
   * Suche Krietere entsprechen Die Methode soll auch pruefen, ob das
   * eingegebenen Datum groesser als die Erscheinungsjahr den
   * Zeitschriften ist
   */

  public List<Zeitschrift> suchZeitschriftNachErschjahrKlein (
      String date)
  {
    int iDate = Integer.parseInt (date);
    for (Zeitschrift Zeitschrift : myZeitschriftList)
    {
      if ( (Zeitschrift.gibErscheinungsdatum ().gibJahr () < iDate))
      {
        Ergebnis.add (Zeitschrift);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  public List<Zeitschrift>
      suchZeitschriftNachSchlagworte (String schlag)
  {
    for (Zeitschrift Zeitschrift : myZeitschriftList)
    {
      if ( (Zeitschrift.gibStichworte ().contains (schlag)) == true)
      {
        Ergebnis.add (Zeitschrift);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Zeitschrift nach dem Datum
   * und liefert eine Liste von entsprechende Zeitschriften zurueck,die
   * Suche Krietere entsprechen Die Methode soll auch pruefen, ob das
   * eingegebenen Datum kleiner als die Erscheinungsjahr den
   * Zeitschriften ist
   */

  public List<Zeitschrift> suchZeitschriftNachErschjahrGross (
      String date)
  {

    int iDate = Integer.parseInt (date);
    for (Zeitschrift Zeitschrift : myZeitschriftList)
    {
      if ( (Zeitschrift.gibErscheinungsdatum ().gibJahr () > iDate))
      {
        Ergebnis.add (Zeitschrift);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Zeitschrift nach dem Datum
   * und liefert eine Liste von entsprechende Zeitschriften zurueck,die
   * Suche Krietere entsprechen Die Methode soll auch pruefen, ob das
   * eingegebenen Datum gleich als die Erscheinungsjahr den
   * Zeitschriften ist
   */

  public List<Zeitschrift> suchZeitschriftNachErschjahrGleich (
      String date)
  {

    int iDate = Integer.parseInt (date);
    for (Zeitschrift Zeitschrift : myZeitschriftList)
    {
      if ( (Zeitschrift.gibErscheinungsdatum ().gibJahr () == iDate))
      {
        Ergebnis.add (Zeitschrift);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode liefert eine Liste von allen Zeitschrift, die in der
   * Medienliste sind
   */
  public List<Zeitschrift> gibMyZeitschriftList ()
  {
    return myZeitschriftList;
  }


  /*
   * Die Methode ermoeglicht,dass man eine neue Liste von von
   * Zeitschrift gibt
   */

  public void setzeMyZeitschriftList (
      List<Zeitschrift> myZeitschriftList)
  {
    this.myZeitschriftList = myZeitschriftList;
  }


  /*
   * Die methode liefert eine Liste zurueck. Durch diese Methode kann
   * man eine Liste von seiner gesuchten krietere bekommen
   */

  public List<Zeitschrift> gibErgebnis ()
  {
    return Ergebnis;
  }


  /*
   * Die Methode implementiert die Verwaltung von der Suche einer
   * Zeitschrift. und sie liefert nichts zurueck
   */

  public void ZeitschriftSuchVerwalter (int i, String s)
  {
    switch (i)
    {
    /*
     * Die case 0 ist die zuweisung der werte null an die Liste Ergebnis
     * ,
     */

    case 0:
      Ergebnis = null;
      break;

    /*
     * Die case 1 Die die zuweisung von der Werte null an die Liste
     * Ergebnis..
     */

    case 1:
      Ergebnis = null;
      ;
      break;

    /*
     * Die case 2 ist Aufruf der Methode ,die nach Erscheinungsdatum
     * gleich als das eingegeben Datum sucht
     */

    case 2:
      suchZeitschriftNachErschjahrGleich (s);
      break;

    /*
     * Die case 3 ist Aufruf der Methode , die nach Erscheinungsdatum
     * Grosser als das eingegeben Datum sucht
     */

    case 3:
      suchZeitschriftNachErschjahrGross (s);
      break;

    /*
     * Die case 4 ist Aufruf der Methode , die nach Erscheinungsdatum
     * kleiner als das eingegeben Datum sucht
     */

    case 4:
      suchZeitschriftNachErschjahrKlein (s);
      break;

    /*
     * Die case 5 ist Aufruf der Methode , die nach Fachgebiet sucht
     */

    case 5:
      suchZeitschriftNachFachgebiet (s);
      break;

    /*
     * Die case 6 ist Aufruf der Methode , die nach Initial sucht
     */

    case 6:
      suchZeitschriftNachInitial (s);
      break;

    /*
     * Die case 7 ist Aufruf der Methode , die nach Sachgebiet sucht
     */

    case 7:
      suchZeitschriftNachSachgebiet (s);
      break;

    /*
     * Die case 8 ist Aufruf der Methode , die nach Schlagworte sucht
     */

    case 8:
      suchZeitschriftNachSchlagworte (s);
      break;

    /*
     * Die case 9 die zuweisung von der Werte null an die Liste
     * Ergebnis.
     */
    case 9:
      Ergebnis = null;
      break;

    /*
     * Die case 10 ist Aufruf der Methode , die nach Stichworte sucht
     */

    case 10:
      suchZeitschriftNachStichworte (s);
      break;

    /*
     * Die case 11 ist Aufruf der Methode ,die nach Thema sucht
     */

    case 11:
      suchZeitschriftNachThema (s);
      break;

    /*
     * Die case 12 ist Aufruf der Methode ,die nach Titel sucht
     */

    case 12:
      suchZeitschriftNachTitel (s);
      break;

    default:
      break;

    }

  }


  /*
   * Die Methode liert ale basis informationen ueber ein Medium in einem
   * String .Die Methode nimmt ein Objekt Medium als parameter und gibt
   * ein String zurueck.
   */

  public String superString (Medium t)
  {
    String s = "\n ";
    s += "\nFach: ";
    s += t.gibFachgebiet ();
    s += " Sach: ";
    s += t.gibSachgebiet ();
    s += " \nThema: ";
    s += t.gibThema ();
    s += " Titel ";
    s += t.gibTitel ();
    s += " \nStichW: ";
    s += t.gibStichworteString ();
    s += " Erschnungsjahr: ";
    s += t.gibErscheinungsdatumString ();
    s += "\n Verlag: ";
    s += t.gibVerlag ().gibName ();

    return s;
  }


  /*
   * Die Methode ErgebnisToString wandelt eine Liste von gefundenen
   * Zeitschrift in String um. und die Methode wird spaeter fuer die Gui
   * verwendet. Die Methode nimmt eine Liste von Objekten Zeitschrift
   * .Und sie gibt ein String zurueck.
   */
  public String ErgebnisToString (List<Zeitschrift> ZeitschriftL)
  {
    String a = " ";

    for (Zeitschrift Zeitschrift : ZeitschriftL)
    {
      a = "Zeitschrift:\n ";

      a += superString (Zeitschrift);
    }
    return a;
  }

}
